/*
 * 理解并正确使用 剩余参数( rest parameter )
 */

// 声明函数时，在形参列表末尾可以使用 ...params 形式声明一个参数
// 调用函数时，会根据传入的参数来确定前面各参数的值，
// 如果前面参数都已经匹配，则将剩余的实参统一添加到一个数组中
function add(a, b, ...params) {
    // 函数内可以使用 arguments 来获取所有实参
    console.log('参数个数:', arguments.length);
    // 前两个参数可以通过 a 和 b 两个变量来获取
    console.log(`a = ${a} , b = ${b}`);
    console.log('剩余参数', params);
}

add(); // 未传任何参数
add(1, 2); // 传递两个参数，恰好可以匹配前两个参数
add(1, 2, 3, 4); // 传递4个参数，前两个匹配a和b，剩余的实参添加到params数组中
add(1, 2, 7, 8, 9);

console.log('- - - '.repeat(10));

// 仅为函数声明一个"剩余参数"(参数名称是suibian)
function multiply(...suibian) {
    // 如果启用了严格模式( 'use strict' )则不能在函数中使用"剩余参数"
    // 通过形参 suibian 来获取所有参数
    console.log('参数个数:', suibian.length);
    console.log(suibian);
}

multiply(4, 5);